package cn.itcast.bos.web.action.take_delivery;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionContext;

import cn.itcast.bos.web.action.base.BaseAction;

/**
 * 处理kindeditor图片上传/管理功能
 * @author 35368
 *
 */
@ParentPackage("json-default")
@Namespace("/")
@Controller
@Scope("prototype")
public class imageAction extends BaseAction<Object>{
	
	//文件上传的 struts2分装的  几个参数
	private File imgFile;
	private String imgFileFileName;
	private String imgFileContentType;
	public void setImgFile(File imgFile) {
		this.imgFile = imgFile;
	}
	public void setImgFileFileName(String imgFileFileName) {
		this.imgFileFileName = imgFileFileName;
	}
	public void setImgFileContentType(String imgFileContentType) {
		this.imgFileContentType = imgFileContentType;
	}


	//上传图片的方法
	@Action(value="image_upload",results={@Result(name="success",type="json")})
	public String upload() throws IOException{
		System.out.println("文件:"+imgFile);
		System.out.println("文件名:"+imgFileFileName);
		System.out.println("文件类型:"+imgFileContentType);
		//获取保存图片的绝对路径
		String savePath = ServletActionContext.getServletContext().getRealPath("/upload/");
		//获取保存图片的相对路径
		String saveUrl = ServletActionContext.getRequest().getContextPath()+"/upload/";
		
		//生成随机图片名
		UUID uuid = UUID.randomUUID();
		//获取文件类型   即扩展名
		String ext = imgFileFileName.substring(imgFileFileName.lastIndexOf("."));
		//生成一个随机的图片名称
		String randomFileName = uuid+ext ;
		
		//保存图片(绝对路径)  即:将图片保存到磁盘目录中
		FileUtils.copyFile(imgFile, new File(savePath,randomFileName));
		
		//通知浏览器文件上传成功
		Map<String,Object> result = new HashMap<String,Object>();
		result.put("error", 0);
		result.put("url", saveUrl+randomFileName);//返回相对路径  ????  是否可以返回绝对路径
		ActionContext.getContext().getValueStack().push(result);
		return SUCCESS;
	}

	// 图片管理器 管理已上传的图片 发送的请求方法   比较难,但能看懂   会修改即可
	@Action(value = "image_manage", results = { @Result(name = "success", type = "json") })
	public String manage() {
		// 根目录路径,可以指定绝对路径,比如:d:/XXXX/upload/xx.jsp 即获得项目存储图片文件夹的绝对路径
		String rootPath = ServletActionContext.getServletContext().getRealPath(
				"/")
				+ "/upload/";

		// 根目录URL,可以指定绝对路径,比如:http://www.yoursite.com/attached/
		String rootUrl = ServletActionContext.getRequest().getContextPath()
				+ "/upload/";

		// 遍历目录 获取文件图片的信息
		List<Map<String, Object>> fileList = new ArrayList<Map<String, Object>>();

		// 当前上传目录 上传的所有图片所在的目录
		File currentPathFile = new File(rootPath);
		// 图片扩展名
		String[] fileTypes = new String[] { "gif", "jpg", "png", "bmp" };

		// 循环遍历图片,并将图片信息存储到集合中
		// currentPathFile.listFiles():获取该文件夹下的所有文件并存到一个集合中
		if (currentPathFile.listFiles() != null) { //????
			for (File file : currentPathFile.listFiles()) {
				//一个hash  存储一个图片的信息(存储指定文件夹下子文件的信息)
				Map<String, Object> hash = new HashMap<String, Object>();
				String fileName = file.getName();
				if (file.isDirectory()) { //如果是文件夹
					hash.put("is_dir", true);//是否是文件夹
					hash.put("has_file", (file.listFiles() != null)); //文件夹中是否有文件
					hash.put("filesize", 0L);//文件的大小   若是文件夹则大小设置为0L
					hash.put("is_photo", false);//是否是图片
					hash.put("filetype", "");//文件类型

				} else if (file.isFile()) {//若是文件
					String fileExt = fileName.substring(
							fileName.lastIndexOf(".") + 1).toLowerCase();//获取文件后缀名  并转为小写
					hash.put("is_dir", false);
					hash.put("has_file", false);
					hash.put("filesize", file.length());
					//Arrays.<String> asList(fileTypes).contains(fileExt) 将数组String[] fileTYpes转成集合 并判断集合中是否包含fileExt
					hash.put("is_photo", Arrays.<String> asList(fileTypes).contains(fileExt));
					hash.put("filetype", fileExt);
				}
				hash.put("filename", fileName);//文件名
				hash.put("datetime", new SimpleDateFormat(
						"yyyy-MM-dd  HH:mm:ss").format(file.lastModified()));
				//file.lastModified()  :获得文件的最后修改的时间
				fileList.add(hash);
			}
		}
		//???????
		Map<String, Object> result = new HashMap<String, Object>();
		result.put("moveup_dir_path", "");// 
		result.put("current_dir_path", rootPath);//当前的绝对路径
		result.put("current_url", rootUrl); //当前的访问 路径
		result.put("total_count", fileList.size()); //总的  图片个数(指定目录下  子文件的个数)
		result.put("file_list", fileList);//图片信息集合
		ActionContext.getContext().getValueStack().push(result);//将结果存储起来

		return SUCCESS;
	}
		
		
	/*	//kindeditor  提供的 方法     图片管理器 
		@Action(value = "picmanage", results = { @Result(type = "json") })
		public String picmanage() throws IOException {
			String realPath = ServletActionContext.getServletContext().getRealPath("/files/");
			File directory = new File(realPath);
			List<Map<String, Object>> fileList = new ArrayList<>();
			if (directory.listFiles() != null) {
				for (File file : directory.listFiles()) {
					Map<String, Object> hash = new HashMap<>();
					String fileName = file.getName();
					if (file.isDirectory()) {
						hash.put("is_dir", true);
						hash.put("has_file", (file.listFiles() != null));
						hash.put("filesize", 0L);
						hash.put("is_photo", false);
						hash.put("filetype", "");
					} else {
						String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
						hash.put("is_dir", false);
						hash.put("has_file", false);
						hash.put("filesize", file.length());
						hash.put("is_photo", true);
						hash.put("filetype", fileExt);
					}
					hash.put("filename", fileName);
					hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified()));
					fileList.add(hash);
				}
			}

			Map<String, Object> result = new HashMap<>();
			result.put("moveup_dir_path", "");
			result.put("current_dir_path", realPath);
			result.put("current_url", ServletActionContext.getRequest().getContextPath() + "/files/");
			result.put("total_count", fileList.size());
			result.put("file_list", fileList);

			ActionContext.getContext().getValueStack().push(result);

			return SUCCESS;
		}*/
}
























